#include <bits/stdc++.h>
using namespace std;

int f[2][200010], v[510];

int main() {
  int n;
  cin >> n;
  int sum = 0;
  for (int k = 1; k <= n; k++) {
    cin >> v[k];
  }
  for (int k = 0; k <= 1; k++) {
    for (int i = 0; i <= 200000; i++) {
      f[k][i] = -1;
    }
  }
  f[0][0] = 0;
  for (int k = 0; k < n; k++) {
    int cur = k % 2, nx = (k + 1) % 2;
    // 两行滚动数组cur：当前行， nx下一行

    for (int i = 0; i <= sum; i++) {
      if (f[cur][i] != -1) {
        f[nx][i] = max(f[cur][i], f[nx][i]);

        // 第k+1个值 给大的人
        f[nx][i + v[k + 1]] = max(f[cur][i], f[nx][i + v[k + 1]]);

        // 第k+1个值 给小的人， 大的人依然大
        if (i - v[k + 1] >= 0) {
          // 大的人依然大
          f[nx][i - v[k + 1]] = max(f[cur][i] + v[k + 1], f[nx][i - v[k + 1]]);
        } else
          // 小的人变成大者
          f[nx][v[k + 1] - i] = max(f[nx][v[k + 1] - i], f[cur][i] + i);
      }
    }
    sum += v[k + 1];
  }

  if (f[n % 2][0] == -1) {
    cout << 0;
  } else {
    cout << f[n % 2][0];
  }

  return 0;
}